﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using DevComponents.DotNetBar;
using System.Resources;
using System.Data.Linq;
using CDStore3Tiers;
using System.Linq;

namespace CuaHangDiaNhac
{
	public partial class frmChiTietDatHang : DevComponents.DotNetBar.Metro.MetroForm
	{
		log4net.ILog log = log4net.LogManager.GetLogger("Chi tiết đặt hàng");
		private StoreCDDataContext db;
		XuLyChiTietDatHang XLCTDH = new XuLyChiTietDatHang();
		XuLyForm XLF = new XuLyForm();
		XuLyDiaNhac XLDN;
		XuLyDatHang XLDH = new XuLyDatHang();
		List<vw_CTDHNew> list;
		List<vw_DiaNew> listDia;
		public int masodh;


		public frmChiTietDatHang(int maso, string tenkh, int sdt)
		{

			InitializeComponent();
			db = new StoreCDDataContext();
			db.Connection.ConnectionString = getConfig.getConnection();
			LoadDGV(maso);
			this.Text += maso.ToString();
			tsTongTien.Text += XLCTDH.TinhTongTien(maso);
			masodh = Convert.ToInt32(this.Text.Substring(18));
			labMaDH.Text = maso.ToString();
			labTenKH.Text = tenkh;
			labSĐT.Text = sdt.ToString();
		}
		private void ResetList()
		{
			list = XLCTDH.DSCTDH(masodh);
		}
		DataGridViewTextBoxColumn colMaDH;
		DataGridViewTextBoxColumn colMaDia;
		DataGridViewTextBoxColumn colTenDia;
		DataGridViewTextBoxColumn colLoaiDia;
		DataGridViewTextBoxColumn colSoLuong;
		DataGridViewTextBoxColumn colDonGia;
		DataGridViewTextBoxColumn colThanhTien;

		public void lockLogin()
		{
			string id = frmLogin.id;
			XLPhanQuyen phanquyen = new XLPhanQuyen();
			List<TaiKhoanChucNang> tkcn = new List<TaiKhoanChucNang>();
			tkcn = phanquyen.TKChucNang(frmLogin.id);


			if (phanquyen.CoQuyen(id, 1004))
			{
				bttAddex.Visible = true;
				bttThemDNVaoCTHD.Visible = true;
			}
			if (phanquyen.CoQuyen(id, 1005))
			{
				bttXoaex.Visible = true;
				tsDelete.Enabled = true;
			}
			if (phanquyen.CoQuyen(id, 1006))
			{
				bttLuuex.Visible = true;
				tsSave.Enabled = true;
			}
			if (phanquyen.CoQuyen(id, 1007))
			{
				//danh cho nut In dat hang
			}
		}

		public void closeall()
		{
			bttAddex.Visible = false;
			bttThemDNVaoCTHD.Visible = false;
			bttXoaex.Visible = false;
			tsDelete.Enabled = false;
			bttLuuex.Visible = false;
			tsSave.Enabled = false;
			//danh cho nut In dat hang
		}

		public void ReSetListDia()
		{
			listDia = XLCTDH.DSDiaNhac();
		}
		public void LoadDSDNDH(int maso)
		{
			var dsdndh = db.vw_CTDH_SelectAll(maso);
			BindingSource diadh = new BindingSource();
			diadh.DataSource = dsdndh;
			bindingNavigator1.BindingSource = diadh;
			dgvCTDH.DataSource = diadh;
			int madh = ConvertType.ToInt(this.Text.Substring(18));
			DatHang dh = new DatHang();
			if (dh.MaDH == madh)
			{
				labMaDH.Text = ConvertType.ToString(dh.MaDH.ToString());
				labTenKH.Text = (dh.TenKH);
				labSĐT.Text = ConvertType.ToString(dh.SoDT.ToString());
			}
			ResetList();
		}
		public void LoadDGV(int maso)
		{
			dgvCTDH.DataSource = null;

			colMaDH = new DataGridViewTextBoxColumn();
			colMaDH.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
			colMaDH.DataPropertyName = "MaDH";
			colMaDH.HeaderText = "Mã đặt hàng";
			colMaDH.Name = "cnameMaDH";
			colMaDH.Visible = false;
			dgvCTDH.Columns.Add(colMaDH);

			colMaDia = new DataGridViewTextBoxColumn();
			colMaDia.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
			colMaDia.DataPropertyName = "MaDia";
			colMaDia.HeaderText = "Mã đĩa";
			colMaDia.Name = "cnameMaDia";
            colMaDia.ReadOnly = true;
			dgvCTDH.Columns.Add(colMaDia);

			colTenDia = new DataGridViewTextBoxColumn();
			colTenDia.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
			colTenDia.DataPropertyName = "TenDia";
			colTenDia.HeaderText = "Tên đĩa";
			colTenDia.Name = "cnameTenDia";
			dgvCTDH.Columns.Add(colTenDia);

			colLoaiDia = new DataGridViewTextBoxColumn();
			colLoaiDia.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
			colLoaiDia.DataPropertyName = "TenLoai";
			colLoaiDia.HeaderText = "Loại đĩa";
			colLoaiDia.Name = "cnameLoaiDia";
			dgvCTDH.Columns.Add(colLoaiDia);

			colSoLuong = new DataGridViewTextBoxColumn();
			colSoLuong.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
			colSoLuong.DataPropertyName = "SoLuong";
			colSoLuong.HeaderText = "số lượng";
			colSoLuong.Name = "cnameSoLuong";
			dgvCTDH.Columns.Add(colSoLuong);

			colDonGia = new DataGridViewTextBoxColumn();
			colDonGia.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
			colDonGia.DataPropertyName = "DonGiaBan";
			colDonGia.HeaderText = "Đơn giá";
			colDonGia.Name = "cnameDonGia";
			dgvCTDH.Columns.Add(colDonGia);

			colThanhTien = new DataGridViewTextBoxColumn();
			colThanhTien.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
			colThanhTien.DataPropertyName = "ThanhTien";
			colThanhTien.Name = "cnameThanhTien";
			colThanhTien.HeaderText = "Thành tiền";
			dgvCTDH.Columns.Add(colThanhTien);

			LoadDSDNDH(maso);
		}
		DataGridViewTextBoxColumn colMaDia1;
		DataGridViewTextBoxColumn colTenDia1;
		DataGridViewTextBoxColumn colTenLoai1;
		DataGridViewTextBoxColumn colDonGia1;
		DataGridViewTextBoxColumn colSoLuong1;
		DataGridViewCheckBoxColumn colcheck;
		public void LoadDSDN()
		{
			//db = new StoreCDDataContext();
			//dgvDSDN.Refresh();
			var dsdn = db.vw_DiaNew_DelectAll();
			BindingSource ds = new BindingSource();
			ds.DataSource = dsdn;
			bindingNavigator2.BindingSource = ds;
			dgvDSDN.DataSource = ds;
			dgvDSDN.Refresh();
			ReSetListDia();
		}
		public void LoadDGVDSDN()
		{
			dgvDSDN.DataSource = null;

			//colcheck = new DataGridViewCheckBoxColumn();
			//colcheck.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
			//colcheck.HeaderText = "Chọn";
			//colcheck.Name = "cnameCheck";
			//dgvDSDN.Columns.Add(colcheck);

			colMaDia1 = new DataGridViewTextBoxColumn();
			colMaDia1.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
			colMaDia1.DataPropertyName = "MaDia";
			colMaDia1.HeaderText = "Mã đĩa";
			colMaDia1.Name = "cnameMaDia1";
            colMaDia1.ReadOnly = true;
			dgvDSDN.Columns.Add(colMaDia1);

			colTenDia1 = new DataGridViewTextBoxColumn();
			colTenDia1.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
			colTenDia1.DataPropertyName = "TenDia";
			colTenDia1.HeaderText = "Tên đĩa";
			colTenDia1.Name = "cnameTenDia1";
			dgvDSDN.Columns.Add(colTenDia1);

			colTenLoai1 = new DataGridViewTextBoxColumn();
			colTenLoai1.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
			colTenLoai1.DataPropertyName = "TenLoai";
			colTenLoai1.HeaderText = "Loại đĩa";
			colTenLoai1.Name = "cnameTenLoai";
			dgvDSDN.Columns.Add(colTenLoai1);

			colSoLuong1 = new DataGridViewTextBoxColumn();
			colSoLuong1.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
			colSoLuong1.DataPropertyName = "SoLuongDia";
			colSoLuong1.HeaderText = "Số lượng";
			colSoLuong1.Name = "cnamesoluong";
			dgvDSDN.Columns.Add(colSoLuong1);

			colDonGia1 = new DataGridViewTextBoxColumn();
			colDonGia1.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
			colDonGia1.DataPropertyName = "DonGiaBan";
			colDonGia1.HeaderText = "Đơn giá";
			colDonGia1.Name = "cnameDonGia1";
			dgvDSDN.Columns.Add(colDonGia1);

			LoadDSDN();
		}
		private void frmChiTietDatHang_Load(object sender, EventArgs e)
		{
			closeall();
			lockLogin();
			db = new StoreCDDataContext();
			db.Connection.ConnectionString = getConfig.getConnection();
			LoadDGVDSDN();
			LoadDSDNDH(masodh);
			panel1.BackColor = Color.FromArgb(0, 192, 0);
			log.Info(frmLogin.id + ": đã load lên form chi tiết đặt hàng");
		}
		private void tsSave_Click(object sender, EventArgs e)
		{
			UpdateCTDH();
		}
		private void bttAddex_Click(object sender, EventArgs e)
		{
			navigationPane1.Expanded = true;
		}
		private void tsRefesh_Click(object sender, EventArgs e)
		{
			int a = Convert.ToInt32(this.Text.Substring(18));
			LoadDGV(a);
			log.Info(frmLogin.id + ": đã làm mới lại danh sách");
		}
		private void tsDelete_Click(object sender, EventArgs e)
		{
			//db = new StoreCDDataContext();
			DatHang dh = new DatHang();
			int madh = Convert.ToInt32(this.Text.Substring(18));
			if (XLDH.KiemTraGiaoHang(madh))
			{
				MessageBoxEx.Show("Bạn không được xóa đĩa nhạc này !");
			}
			else
			{
				if (dgvCTDH.SelectedRows.Count > 0)
				{
					DialogResult accept = DevComponents.DotNetBar.MessageBoxEx.Show("Bạn có chắc chắn muốn xóa ?", "thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
					if (accept == DialogResult.Yes)
					{
						for (int i = 0; i < dgvCTDH.SelectedRows.Count; i++)
						{
							try
							{

								int madia = Convert.ToInt32(dgvCTDH.SelectedRows[i].Cells["cnameMaDia"].Value);
								int soluong = Convert.ToInt32(dgvCTDH.SelectedRows[i].Cells["cnameSoLuong"].Value);
								string tendia = dgvCTDH.SelectedRows[i].Cells["cnameTenDia"].Value.ToString();
								var xoadh = db.ChiTietDatHang_Delete(madia, madh, soluong);
								db.SubmitChanges();
								log.Info(frmLogin.id + ": đã xóa đĩa nhạc " + tendia + " ra khỏi đặt hàng mã số [" + masodh + "]");
							}
							catch
							{
								DevComponents.DotNetBar.MessageBoxEx.Show("Ops! Đã xảy ra lỗi!...");
								log.Error(frmLogin.id + ": xóa đĩa nhạc ra khỏi đặt hàng thất bại");
							}
						}

					}
					int a = Convert.ToInt32(this.Text.Substring(18));
					LoadDGV(a);
					LoadDGVDSDN();

				}
			}
		}
		void ThemVaoChiTietDH()
		{
			int trung = 0;
			string mes = "";
			int madh = ConvertType.ToInt(this.Text.Substring(18));
			if (XLDH.KiemTraGiaoHang(madh)) { MessageBoxEx.Show("Bạn không được thêm đĩa nhạc !"); }
			else
			{
				{
					for (int i = 0; i < dgvDSDN.SelectedRows.Count; i++)
					{
						int madia = ConvertType.ToInt(dgvDSDN.SelectedRows[i].Cells["cnameMaDia1"].Value.ToString());
						int soluong = ConvertType.ToInt(dgvDSDN.SelectedRows[i].Cells["cnameSoLuong"].Value.ToString());
						try
						{
							if (KiemTraTrung(madia) == 1)
							{
								trung = 1;
								mes += "\n - Đĩa nhạc có mã : {" + madia + "}";
							}
							else
							{
								string tendia = dgvDSDN.SelectedRows[i].Cells["cnameTenDia1"].Value.ToString();
								dgvCTDH.DataSource = db.ChiTietDatHang_Insert(madh, madia, soluong);
								log.Info(frmLogin.id + ": đã thêm đĩa nhạc " + tendia + " vào đặt hàng có mã số [" + madh + "]");
							}
						}
						catch (Exception)
						{
							log.Error(frmLogin.id + ": thêm đĩa nhạc vào đặt hàng thất bại");
						}
					}
					if (trung == 1)
					{
						MessageBoxEx.Show("Những đĩa nhạc sau đã có trong chi tiết đặt hàng : " + mes);
					}
				}
			}

		}
		void UpdateCTDH()
		{
			//  db = new StoreCDDataContext();
			// DatHang dh = new DatHang();
			int madh = Convert.ToInt32(this.Text.Substring(18));
			if (XLDH.KiemTraGiaoHang(madh)) { MessageBoxEx.Show("Bạn không được sửa đĩa nhạc này !"); }
			else
			{
				if (dgvCTDH.SelectedRows.Count > 0)
				{
					for (int i = 0; i < dgvCTDH.Rows.Count; i++)
					{
						try
						{

							int madia = Convert.ToInt32(dgvCTDH.Rows[i].Cells["cnameMaDia"].Value);
							int soluong = Convert.ToInt32(dgvCTDH.Rows[i].Cells["cnameSoLuong"].Value);
							int sl = XLCTDH.sl(madh, madia);
							if (soluong > 0)
							{
								for (int j = 0; j < dgvDSDN.Rows.Count; j++)
								{

									int madia1 = Convert.ToInt32(dgvDSDN.Rows[j].Cells["cnameMaDia1"].Value);
									if (madia1 == madia)
									{
										int soluong1 = Convert.ToInt32(dgvDSDN.Rows[j].Cells["cnamesoluong"].Value);
										if (soluong > soluong1 + sl)
										{
											MessageBoxEx.Show("Số lượng  của mã đĩa " + madia1 + " không đủ, mời bạn nhập lại số lượng đĩa đặt hàng !");
										}
										else
										{
											string tendia = dgvCTDH.Rows[i].Cells["cnameTenDia"].Value.ToString();
											var update = db.ChiTietDatHang_Update(madh, madia, soluong);
											db.SubmitChanges();
											log.Info(frmLogin.id + ": đã cập nhật lại số lượng của đĩa nhạc " + tendia + " trong đặt hàng mã số [" + masodh + "]");
										}
									}
								}
							}
							else
							{
								MessageBoxEx.Show("Số lượng đặt hàng của mã đĩa " + madia + " phải lớn hơn 0 !");
							}
						}

						catch
						{
							DevComponents.DotNetBar.MessageBoxEx.Show("Ops! Đã xảy ra lỗi!...");
							log.Error(frmLogin.id + ": cập nhật số lượng đĩa nhạc trong đặt hàng thất bại");
						}

					}

				}
			}
			int a = Convert.ToInt32(this.Text.Substring(18));
			LoadDGV(a);
			LoadDGVDSDN();
		}
		int KiemTraTrung(int i)
		{
			int kq = 0;
			if (dgvCTDH.Rows.Count > 0)
			{
				for (int j = 0; j < dgvCTDH.Rows.Count; j++)
				{
					if (ConvertType.ToInt(dgvCTDH.Rows[j].Cells["cnameMaDia"].Value.ToString()) == i)
						kq = 1;
				}
			}
			return kq;
		}
		private void btnThemDiaNhac_Click(object sender, EventArgs e)
		{
			ThemVaoChiTietDH();
			db.SubmitChanges();
			int a = Convert.ToInt32(this.Text.Substring(18));
			LoadDGV(a);
			LoadDGVDSDN();
		}
		private void tsTimkiem_Leave(object sender, EventArgs e)
		{
			if (string.IsNullOrEmpty(tsTimkiem.Text))
			{
				tsTimkiem.Text = "Nhập giá trị cần tìm kiếm !";
				XLF.loadDGV(bindingNavigator1, dgvCTDH, list);
			}
		}
		private void tsTimkiem_MouseUp(object sender, MouseEventArgs e)
		{
			tsTimkiem.Clear();
		}
		private void tsTimkiem_TextChanged(object sender, EventArgs e)
		{
			//XLF.loadDGV(bindingNavigator1, dgvCTDH, list);
			XLCTDH = new XuLyChiTietDatHang();
			XLF.loadDGV(bindingNavigator1, dgvCTDH, XLCTDH.SearchCTDH(list, tsTimkiem.Text));
		}
		private void LockContextMenu(bool p)
		{
//			bttAddex.Enabled = p;
//			bttLuuex.Enabled = p;
//			bttXoaex.Enabled = p;
//			bttRefeshex.Enabled = p;
		}
		private void LockContextMenu2(bool p)
		{
			btnThemDiaNhac.Enabled = p;
		}
		private void dgvCTDH_MouseDown(object sender, MouseEventArgs e)
		{
			DataGridView.HitTestInfo hit;
			if (e.Button == MouseButtons.Right)
			{
				hit = dgvCTDH.HitTest(e.X, e.Y);
				if (hit.Type == DataGridViewHitTestType.Cell)
				{
					if (!((DataGridViewRow)(dgvCTDH.Rows[hit.RowIndex])).Selected)
					{
						dgvCTDH.ClearSelection();
						((DataGridViewRow)dgvCTDH.Rows[hit.RowIndex]).Selected = true;
					}
				}
			}
			if (dgvCTDH.SelectedRows.Count > 1)
				LockContextMenu(false);
			else
				LockContextMenu(true);
		}

		private void dgvDSDN_MouseDown(object sender, MouseEventArgs e)
		{
			DataGridView.HitTestInfo hit;
			if (e.Button == MouseButtons.Right)
			{
				hit = dgvDSDN.HitTest(e.X, e.Y);
				if (hit.Type == DataGridViewHitTestType.Cell)
				{
					if (!((DataGridViewRow)(dgvDSDN.Rows[hit.RowIndex])).Selected)
					{
						dgvCTDH.ClearSelection();
						((DataGridViewRow)dgvDSDN.Rows[hit.RowIndex]).Selected = true;
					}
				}
			}
			if (dgvDSDN.SelectedRows.Count > 1)
				LockContextMenu2(false);
			else
				LockContextMenu2(true);
		}

		private void tsTimKiemDia_Leave(object sender, EventArgs e)
		{
			if (string.IsNullOrEmpty(tsTimKiemDia.Text))
			{
				tsTimKiemDia.Text = "Nhập giá trị cần tìm kiếm !";
				XLF.loadDGV(bindingNavigator2, dgvDSDN, listDia);
			}
		}

		private void tsTimKiemDia_TextChanged(object sender, EventArgs e)
		{
			XLCTDH = new XuLyChiTietDatHang();
			XLF.loadDGV(bindingNavigator2, dgvDSDN, XLCTDH.SearchDia(listDia, tsTimKiemDia.Text));
		}

		private void tsTimKiemDia_MouseUp(object sender, MouseEventArgs e)
		{
			tsTimKiemDia.Clear();
		}

	}
}












